vcTask
Simulation time can be consumed by using 'vcTasks' with 'await', but only within an 'async' function.
See in: Overview
Module: vcCore
Parent: -
Children -
Referenced by: vcCore.allTasks(), vcCore.anyTask(), vcCore.condition(), vcCore.delay(), ... (see more)
vcCore.allTasks()
vcCore.anyTask()
vcCore.condition()
vcCore.delay()
vcServoController.move()
vcServoController.moveJoint()
Example: vcTask Examples
"A collection of different ways to create a vcTask." import vcCore as vc comp = vc.getComponent() async def OnRun(): # wait delay await vc.delay(2) # returns vcTask print ("delay passed") # wait servo motion servo = comp.findBehavior('Servo Controller') servo.setJointTarget(0,100) await servo.move() # returns vcTask print ("servo motion passed") # wait signal value. Signal needs to be connected to the script signal = comp.findBehavior('BooleanSignal') await signal.waitFor(True) # returns vcTask print ("signal value received") # wait any event, e.g. vcNode.OnNodeTransform # gets triggered when link moved with e.g. Interact tool or by servo link = comp.findNode("Link_1") await link.OnNodeTransform.wait() # returns vcTask print ("OnNodeTransform event arrived")
Example: vcTask Async Advanced Example
""" An example of two asynchronously driven joint routines """ import vcCore as vc comp = vc.getComponent() servo_blue = comp.findBehavior('ServoController2') servo_red = comp.findBehavior('ServoController1') def get_next_blue_task(blue_i): if blue_i == 0: return servo_blue.moveJoint(0, 100) elif blue_i == 1: return vc.delay(1) elif blue_i == 2: return servo_blue.moveJoint(0, 0) else: print ("blue done") return None def get_next_red_task(red_i): if red_i == 0: return servo_red.moveJoint(0, 500) elif red_i == 1: return vc.delay(1) elif red_i == 2: return servo_red.moveJoint(0, 0) else: print ("red done") return None async def OnRun(): tasks = [] red_i = 0 blue_i = 0 red_t = get_next_red_task(red_i) blue_t = get_next_blue_task(blue_i) tasks = [red_t, blue_t] while True: await vc.anyTask(tasks, autoCancel=False) if red_t and red_t.done(): red_i += 1 red_t = get_next_red_task(red_i) if blue_t and blue_t.done(): blue_i += 1 blue_t = get_next_blue_task(blue_i) tasks = [] if red_t: tasks.append(red_t) if blue_t: tasks.append(blue_t) if len(tasks) == 0: return